<!DOCTYPE html>
<html>
<head>
    <title>deferred.promise()方法</title>
    <meta charset="utf-8"/>
    <script src="../../../js/jquery-1.10.1.min.js"></script>
    <script>

//        //一个版本
/**
 * ，jQuery提供了deferred.promise()方法。它的作用是，在原来的deferred对象上返回另一个deferred对象
 * ，后者只开放与改变执行状态无关的方法（比如done()方法和fail()方法），
 * 屏蔽与改变执行状态有关的方法（比如resolve()方法和reject()方法），从而使得执行状态不能被改变
 */
//        var dtd = $.Deferred(); // 新建一个deferred对象
//        var wait = function(dtd){
//            var tasks = function(){
//                alert("执行完毕!");
//                dtd.resolve(); //改变deferred对象的执行状态
//            };
//            setTimeout(tasks, 2500);
//            return dtd.promise();//返回promise对象
//        };
//
//        var dd = wait(dtd);
//        $.when(dd).done(function(){ alert("哈哈，成功了！"); }).fail(function(){ alert("出错啦！"); });
//        dd.resolve();

            //一个版本
            var wait = function(dtd){
                var dtd = $.Deferred();
                var tasks = function(){
                    alert("执行完毕!");
                    dtd.resolve(); //改变deferred对象的执行状态
                };
                setTimeout(tasks, 2500);
                return dtd.promise();//返回promise对象
            };
            $.when(wait()).done(function(){ alert("哈哈，成功了!"); }).fail(function(){ alert("出错啦!"); });

    </script>
</head>
<body>
    <p>deferred.promise()方法
        <input type="button" value="Test"/>
    </p>
</body>
</html>